package com.ljx.stateMode.before;

import lombok.Data;

/**
 * 状态模式（使用状态模式前的代码）
 *
 * 问题分析：
 * * 使用了大量的switch…case这样的判断（if…else也是一样)，使程序的可阅读性变差。
 * * 扩展性很差。如果新加了断电的状态，我们需要修改判断逻辑
 *
 * @作者 LJX
 * @日期 2022/12/26 9:35
 */
public class StateTestBefore {

    public static void main(String[] args) {
        Life life = new Life();
        life.setState(ILife.STOP_STATE);
        life.setUpOpen();
        life.setUpClose();
        life.setUpRun();
        life.setUpStop();
    }

}

/**
 * 抽象状态接口
 */
interface ILife{
    //运行状态
    Integer RUNING_STATE = 1;
    //关门状态
    Integer CLOSEING_STATE = 2;
    //开门状态
    Integer OPEN_STATE = 3;
    //停止状态
    Integer STOP_STATE = 4;

    //设置状态方法
    void setUpRun();

    void setUpClose();

    void setUpOpen();

    void setUpStop();

}

/**
 * 抽象状态接口实现
 */
@Data
class Life implements ILife{

    Integer state;

    /**
     * 执行运行状态
     */
    @Override
    public void setUpRun() {
        if (state.equals(RUNING_STATE)) {
            System.out.println("正在运行，不能运行");
        }else if (state.equals(CLOSEING_STATE)) {
            System.out.println("关门状态，可以运行");
            setState(RUNING_STATE);
        }else if (state.equals(OPEN_STATE)) {
            System.out.println("开门状态，不能运行");
        }else if (state.equals(STOP_STATE)) {
            System.out.println("停止状态，可以运行");
            setState(RUNING_STATE);
        }
    }

    @Override
    public void setUpClose() {
        if (state.equals(RUNING_STATE)) {
            System.out.println("运行状态，不能关门");
        }else if (state.equals(CLOSEING_STATE)) {
            System.out.println("关门状态，不能关门");
        }else if (state.equals(OPEN_STATE)) {
            System.out.println("开门状态，可以关门");
            setState(CLOSEING_STATE);
        }else if (state.equals(STOP_STATE)) {
            System.out.println("停止状态，不能关门");
        }
    }

    @Override
    public void setUpOpen() {
        if (state.equals(RUNING_STATE)) {
            System.out.println("运行状态，不能开门");
        }else if (state.equals(CLOSEING_STATE)) {
            System.out.println("关门状态，可以开门");
            setState(OPEN_STATE);
        }else if (state.equals(OPEN_STATE)) {
            System.out.println("开门状态，不能开门");
        }else if (state.equals(STOP_STATE)) {
            System.out.println("停止状态，可以开门");
            setState(OPEN_STATE);
        }
    }

    @Override
    public void setUpStop() {
        if (state.equals(RUNING_STATE)) {
            System.out.println("运行状态，可以停止");
            setState(STOP_STATE);
        }else if (state.equals(CLOSEING_STATE)) {
            System.out.println("关门状态，可以停止");
            setState(STOP_STATE);
        }else if (state.equals(OPEN_STATE)) {
            System.out.println("开门状态，已经停止");
        }else if (state.equals(STOP_STATE)) {
            System.out.println("停止状态，不能停止");
        }
    }
}
